package createtype.Singleton;

/**
 * Created by LYJ on 2016/10/18.
 * 双检锁（不建议使用）
 */
public class DoubleCheckedLockingSingleton {
    // java中使用双重检查锁定机制,由于Java编译器和JIT的优化的原因系统无法保证我们期望的执行次序。
    // 在java5.0修改了内存模型,使用volatile声明的变量可以强制屏蔽编译器和JIT的优化工作
    private volatile static DoubleCheckedLockingSingleton uniqueInstance;
    private DoubleCheckedLockingSingleton(){}
    public static DoubleCheckedLockingSingleton getInstance(){
        if(uniqueInstance==null){
            synchronized (DoubleCheckedLockingSingleton.class){
                if(uniqueInstance==null){
                    uniqueInstance=new DoubleCheckedLockingSingleton();
                }
            }
        }
        return uniqueInstance;
    }

}
